# @Filename:    sliceAndIndex
# @Author:      王佳伟
# @Time:        2025-03-31 10:55
# @Describe:    切片和索引
import numpy as np

# 基本切片是 Python 中基本切片概念到 n 维的扩展。
# 通过将start，stop和step参数提供给内置的slice函数来构造一个 Python slice对象。
# 此slice对象被传递给数组来提取数组的一部分。

a = np.arange(10)
s = slice(2, 7, 2)
print(a[s])

# 通过将由冒号分隔的切片参数（start:stop:step）直接提供给ndarray对象，也可以获得相同的结果。
a = np.arange(10)
b = a[2:7:2]
print(b)

print("======================")

# 如果只输入一个参数，则将返回与索引对应的单个项目。
# 如果使用a:，则从该索引向后的所有项目将被提取。
# 如果使用两个参数（以:分隔），则对两个索引（不包括停止索引）之间的元素以默认步骤进行切片。

a = np.arange(10)
print(a)
b = a[5]
print(b)
# 对始于索引的元素进行切片
print(a[2:])
# 对索引之间的元素进行切片
print(a[2:5])

print("======================")

a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)
# 对始于索引的元素进行切片
print('现在我们从索引 a[1:] 开始对数组切片')
print(a[1:])

print("======================")

# 切片还可以包括省略号（...），来使选择元组的长度与数组的维度相同。
# 如果在行位置使用省略号，它将返回包含行中元素的ndarray。
a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])

print('我们的数组是：')
print(a)
print('\n')

# 这会返回第二列元素的数组：

print('第二列的元素是：')
print(a[...,1])
print('\n')

# 现在我们从第二行切片所有元素：

print('第二行的元素是：')
print(a[1,...])
print('\n')

# 现在我们从第二列向后切片所有元素
print('第二列及其剩余元素是：')
print(a[...,1:])

